/**
 * 端口分配器 - 为每个实例分配独立的端口范围
 */
import { InstanceInfo } from './instanceManager' // Using interface only

// 端口配置接口
export interface PortConfig {
  masterPort: number
  childPort: number
  websocketPort: number
}

// 基础端口配置
const BASE_PORTS = {
  master: 3000,
  child: 3001,
  websocket: 3002
}

// 每个实例的端口偏移量
const PORT_OFFSET = 10

/**
 * 端口分配器类
 */
export class PortAllocator {
  /**
   * 获取下一个可用的端口配置
   * @param existingInstances - An array of currently active instances.
   * @returns 端口配置对象
   */
  public static getNextAvailablePorts(existingInstances: InstanceInfo[]): PortConfig {
    const usedPortSets = new Set<number>()

    // 收集已使用的端口集合
    existingInstances.forEach(instance => {
      if (instance.ports && instance.ports.masterPort) {
        const portSetIndex = Math.floor((instance.ports.masterPort - BASE_PORTS.master) / PORT_OFFSET)
        usedPortSets.add(portSetIndex)
      }
    })

    // 找到第一个未使用的端口集合索引
    let portSetIndex = 0
    while (usedPortSets.has(portSetIndex)) {
      portSetIndex++
    }

    // 计算实际端口号
    const offset = portSetIndex * PORT_OFFSET
    const ports: PortConfig = {
      masterPort: BASE_PORTS.master + offset,
      childPort: BASE_PORTS.child + offset,
      websocketPort: BASE_PORTS.websocket + offset
    }

    console.log(`分配端口集合 ${portSetIndex}:`, ports)
    return ports
  }
}
